Skip to content

Add maintainer runbook for the major-version cutover#337

Draft
miharp wants to merge 1 commit into
OpenVoxProject:masterfrom
miharp:docs/cutover-runbook
Draft

Add maintainer runbook for the major-version cutover#337
miharp wants to merge 1 commit into
OpenVoxProject:masterfrom
miharp:docs/cutover-runbook

Conversation

@miharp

@miharp miharp commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

What

Adds MAINTAINING.md — a maintainer runbook for the major-version cutover, so
there's a concrete, shareable procedure for when OpenVox 9 (or any product's new
major) ships.

It covers:

  • How versions are wired — collections + the _<product>_latest symlink,
    _data/products.yml as the registry, nav files, the version selector, and pinned
    reference generation.
  • Phase 1 — stand up the new version (preview): copy the collection, sweep the
    authored pages for version strings (git grep, so generated pages are excluded),
    register the collection in _config.yml, wire nav, add a products.yml version
    block pinned to the new tag, generate + verify. latest stays on the current major.
  • Phase 2 — promote to latest (GA): repoint the symlink, move the latest
    collection's nav to the new version, set latest:, freeze the old version's pin,
    and run the no-redirect page-set diff.
  • Rollback.

Validation

Validated end to end in a throwaway sandbox combined with the version selector
(#335) — a full OpenVox 9.x cutover of both phases, built against the pinned
9.0.0-alpha1 references.

Phase 1 — stand up 9.x alongside (preview)

phase1-9x phase1-8x
$ cp -r docs/_openvox_8x docs/_openvox_9x
$ cp _data/nav/openvox_8x.yml _data/nav/openvox_9x.yml
$ git add docs/_openvox_9x _data/nav/openvox_9x.yml

$ git grep -nE 'OpenVox 8|8\.x' -- docs/_openvox_9x _data/nav/openvox_9x.yml | wc -l
25            # reviewed: mechanical hits bumped to 9; 11 version-specific 8.x items left

# register the collection in _config.yml + _data/nav_map.yml + _data/navigation.yml, add the products.yml pin
$ bundle exec rake references:openvox VERSION=9.0.0-alpha1 COLLECTION=_openvox_9x INSTALLPATH=docs
$ bundle exec jekyll build
            done in 33.9 seconds.

Phase 2 — promote 9.x to latest (GA)

phase2-latest phase2-8x-frozen
$ ln -sfn _openvox_9x docs/_openvox_latest
# openvox_latest nav -> openvox_9x; move openvox_latest into the 9x nav_map entry; products.yml latest: 9x
$ bundle exec jekyll build
            done in 33.7 seconds.

$ for v in 8.x 9.x latest; do curl -s -o /dev/null -w '%{http_code} ' .../openvox/$v/; curl -s .../openvox/$v/ | grep -o '<title>[^<]*'; done
  /openvox/8.x/    200  <title>OpenVox 8 | OpenVox Documentation   (frozen)
  /openvox/9.x/    200  <title>OpenVox 9 | OpenVox Documentation
  /openvox/latest/ 200  <title>OpenVox 9 | OpenVox Documentation   (flipped to 9.x)

Result: /openvox/latest/ serves OpenVox 9, the version picker badges 9.x as
latest, and 8.x stays frozen. The version-string sweep leaves only legitimate
version-specific 8.x content (the release-notes history and hiera backward-compat
notes).

Part of #325.

Note: the older WORKFLOW.md / WORKFLOW_reference.md predate the current
docs/_<collection>/ structure and task names; this runbook documents the current
setup. Reconciling/retiring those is out of scope here.

Document the copy-on-major-release cutover in a new MAINTAINING.md: how versions
are wired (collections, the _latest symlink, products.yml, the three nav files,
the version selector, generated references), and a two-phase procedure for adding
a new major version — Phase 1 stands it up alongside as a preview, Phase 2 promotes
it to latest and freezes the old one — plus rollback and the no-redirect caveat.

The procedure was validated end to end with local OpenVox 9.x cutover dry runs of
both phases, combined with the version selector. The content-string sweep uses
`git grep` (so generated pages are excluded) over both the collection and the
copied nav file, and the nav steps cover all three nav inputs:
_data/nav/<key>.yml, _data/nav_map.yml, and _data/navigation.yml (the top bar).

Part of OpenVoxProject#325.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Michael Harp <mike@mikeharp.com>
@miharp miharp force-pushed the docs/cutover-runbook branch from 4e1bf74 to d7916dd Compare June 12, 2026 13:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant